'use strict';

const Controller = require('egg').Controller;
const jwt = require('jsonwebtoken');

const giteeInfo = {
  client_id: '9a21414f8733acff996d060b3c9d19734029f56d8a1283b71b6a910394757288',
  redirect_uri: 'http://10.1.33.16:3000/login',
  client_secret: 'a2355bab9da83b56a93470cc952d68e0cfb6f46f55d4f0c97f264fc560be782b',
};


class HomeController extends Controller {
  async login() {
    const { ctx, app } = this;

    const { username, password, name, id } = ctx.request.body;

    console.log(username, password, name);
    // 验证数据库中是否存在用户名和密码

    // const data = await app.mysql.query(`select * from userlist where username="${username}" and password="${password}"`);

    // 从数据库中 查找数据 返回数组
    // const data = await app.mysql.select('userlist', {
    //   password,
    //   username,
    // });

    // 从数据库中 查找数据 返回对象
    // const data = await app.mysql.get('userlist', {
    //   password,
    //   username,
    // });

    // 增 insert
    // await app.mysql.insert('userlist', {
    //   username,
    //   password,
    //   name,
    // });

    // 删 delete
    // await app.mysql.delete('userlist', { id: id * 1 });

    // 改 update
    await app.mysql.update('userlist', {
      id,
      username,
    });

    ctx.body = {
      code: 1,
    };
  }

  async index() {
    const { ctx, app } = this;

    // 获取前端传来的参数
    const { username, password } = ctx.request.body;

    // 在数据库中判断是否存在
    const data = await app.mysql.get('userlist', { username, password });

    if (data) {
      ctx.body = {
        code: 1,
        token: jwt.sign(data.id, '1908A'),
      };
    } else {
      ctx.body = {
        code: 0,
        msg: '用户名或者密码错误',
      };
    }
  }

  // 获取用户信息
  async user() {
    // ctx: context(上下文)
    // egg：实例
    // request: 请求信息（前端）
    // response: 响应信息（后端）
    const { ctx, app } = this;

    // 获取请求头中的token
    const { authorization } = ctx.request.headers;

    try {
      // 解密token
      const token = jwt.verify(authorization, '1908A');

      // 从数据库中查找用户信息
      const data = await app.mysql.get('userlist', { id: token });

      ctx.body = {
        code: 0,
        data,
      };
    } catch (error) {
      // 更改网络响应码
      ctx.status = 401;
      ctx.body = {
        code: 0,
        msg: '登录过期，请重新登录',
      };
    }
  }

  async giteeLogin() {
    const { ctx, app } = this;

    // 获取前端传来的code
    const { code } = ctx.request.body;

    // 同过code 获取用户在码云中的token
    const res = await ctx.curl('https://gitee.com/oauth/token', {
      method: 'post',
      data: {
        grant_type: 'authorization_code',
        code,
        client_id: giteeInfo.client_id,
        redirect_uri: giteeInfo.redirect_uri,
        client_secret: giteeInfo.client_secret,
      },
      dataType: 'json', // 将返回值 转化为json
    });


    // 获取用户在码云的token
    const token = res.data.access_token;

    // 通过token 换取 用户详细信息
    const userInfo = await ctx.curl(`https://gitee.com/api/v5/user?access_token=${token}`, { dataType: 'json' });

    // 判断用户信息是否存于数据库
    const data = await app.mysql.get('userlist', { id: userInfo.data.id });

    if (!data) {
      // 如果data为null 说明数据库中不存在第三方登录人的信息  就将信息保存到库中
      await app.mysql.insert('userlist', {
        id: userInfo.data.id,
        name: userInfo.data.name,
        username: userInfo.data.login,
        password: '123',
        avatar_url: userInfo.data.avatar_url,
      });
    }

    ctx.body = {
      code: 1,
      token: jwt.sign(userInfo.data.id, '1908A'),
    };
  }

}

module.exports = HomeController;
